package com.hspedu.reflection;

import java.lang.reflect.Field;

/**
 * @author DL5O
 * @version 1.0
 * 演示反射操作属性，爆破操作属性
 */
public class RefleAccessProperty {
    public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchFieldException {

        //1.得到Student类对应的 Class对象
        Class<?> stuCls = Class.forName("com.hspedu.reflection.Student");
        //2.创建对象
        Object o = stuCls.newInstance();//运行类型为 student
        System.out.println(o.getClass());
        //3.使用反射得到age 这个属性对象
        Field age = stuCls.getField("age");
        age.set(o,88);//通过反射来操作属性
        System.out.println(age.get(o));//88，返回age这个属性的值，通过反射来做的
        System.out.println(o);

        //4.使用反射操作name属性
        Field name = stuCls.getDeclaredField("name");
        name.setAccessible(true);//对name进行爆破，可以操作private 属性
//        name.set(o,"大龙");
        name.set(null,"大龙..");//静态属性在类加载的
        System.out.println(name.get(o));//获取属性值
        System.out.println(name.get(null));//获取属性值，要求name是static
        System.out.println(o);
    }
}

class Student{
    public int age;
    private static String name;

    public Student() {
    }

    @Override
    public String toString() {
        return "Student["+"name=" + name + ",age=" + age + "]";
    }
}
